home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 June: Reference Library / Dev.CD Jun 95 / Dev.CD Jun 95.toast / What's New? / New System Software Extensions / QuickDraw 3D ß / Programming / Interfaces / QD3DShader.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-04  |  26.4 KB  |  900 lines  |  [TEXT/MPS ]

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        QD3DShader.h                                             **
  4.  **                                                                          **
  5.  **                                                                          **
  6.  **     Purpose:     public data structures and prototypes                     **
  7.  **                                                                          **
  8.  **                                                                          **
  9.  **                                                                          **
  10.  **     Copyright (C) 1991-1995 Apple Computer, Inc. All rights reserved.     **    
  11.  **                                                                          **
  12.  **                                                                          **
  13.  *****************************************************************************/
  14. #ifndef QD3DShader_h
  15. #define QD3DShader_h
  16.  
  17. #if PRAGMA_ONCE
  18.     #pragma once
  19. #endif
  20.  
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif    /* __cplusplus */
  24.  
  25. #if defined(ESCHER_VER_15) && ESCHER_VER_15
  26.  
  27. #define kQ3NeighborhoodFlagImagePlane                    ((unsigned long)1 << 0)
  28. #define kQ3NeighborhoodFlagViewInfo                        ((unsigned long)1 << 1)
  29. #define kQ3NeighborhoodFlagLightInfo                    ((unsigned long)1 << 2)
  30. #define kQ3NeighborhoodFlagRenderer                        ((unsigned long)1 << 3)
  31.  
  32. #define kQ3NeighborhoodFlagAmbientCoefficient            ((unsigned long)1 << 4)
  33. #define kQ3NeighborhoodFlagDiffuseColor                    ((unsigned long)1 << 5)
  34. #define kQ3NeighborhoodFlagSpecularColor                ((unsigned long)1 << 6)
  35. #define kQ3NeighborhoodFlagSpecularControl                ((unsigned long)1 << 7)
  36. #define kQ3NeighborhoodFlagTransparencyColor            ((unsigned long)1 << 8)
  37. #define kQ3NeighborhoodFlagEmittedColor                    ((unsigned long)1 << 9)
  38.  
  39. #define kQ3NeighborhoodFlagDepth                        ((unsigned long)1 << 10)
  40.  
  41. #define kQ3NeighborhoodFlagSurfaceUV                    ((unsigned long)1 << 11)
  42. #define kQ3NeighborhoodFlagSurfaceLocation                ((unsigned long)1 << 12)
  43. #define kQ3NeighborhoodFlagSurfaceNormal                ((unsigned long)1 << 13)
  44. #define kQ3NeighborhoodFlagSurfaceTangent                ((unsigned long)1 << 14)
  45.  
  46. #define kQ3NeighborhoodFlagSurfaceFilterSize            ((unsigned long)1 << 15)    
  47. #define kQ3NeighborhoodFlagSurfaceProjectedPixelX        ((unsigned long)1 << 16)
  48. #define kQ3NeighborhoodFlagSurfaceProjectedPixelY        ((unsigned long)1 << 17)
  49.  
  50. #define kQ3NeighborhoodFlagSurfaceWorldFilterSize        ((unsigned long)1 << 18)    
  51. #define kQ3NeighborhoodFlagSurfaceWorldProjectedPixelX    ((unsigned long)1 << 19)
  52. #define kQ3NeighborhoodFlagSurfaceWorldProjectedPixelY    ((unsigned long)1 << 20)
  53.  
  54. #define kQ3NeighborhoodFlagShadingUV                    ((unsigned long)1 << 21)
  55. #define kQ3NeighborhoodFlagShadingNormal                ((unsigned long)1 << 22)
  56. #define kQ3NeighborhoodFlagShadingColor                    ((unsigned long)1 << 23)
  57. #define kQ3NeighborhoodFlagShadingScalar                ((unsigned long)1 << 24)
  58. #define kQ3NeighborhoodFlagShadingOpacity                ((unsigned long)1 << 25)
  59. #define kQ3NeighborhoodFlagShadingTrim                    ((unsigned long)1 << 26)
  60.  
  61. typedef struct TQ3ImageSubRegion {
  62.     unsigned long         north;
  63.     unsigned long        east;
  64.     
  65.     unsigned long         south;
  66.     unsigned long         west;
  67. } TQ3ImageSubRegion;
  68.  
  69. typedef struct TQ3ImagePlane {
  70.     /* pixel location */
  71.     unsigned long        imageX;
  72.     unsigned long        imageY;
  73.     
  74.     /* imageplane size */
  75.     unsigned long        imageSizeX;
  76.     unsigned long        imageSizeY;
  77.     
  78.     /* pixel location mapped to 0-1 */
  79.     TQ3Param2D            imageUV;
  80.  
  81.     /* valid sub-region of pixmap */    
  82.     TQ3ImageSubRegion    imageSubRegion;
  83.      
  84.     /* pixmap typically attached to drawcontext */
  85.     TQ3Pixmap            pixmap;
  86. } TQ3ImagePlane;
  87.  
  88. typedef struct TQ3ViewInfo {
  89.     TQ3CameraObject        camera;
  90.     TQ3Point3D            cameraLocation;
  91.     TQ3Vector3D            viewDirection;
  92. } TQ3ViewInfo;
  93.  
  94. typedef struct TQ3NeighborhoodPrivate *TQ3NeighborhoodObject;
  95.  
  96.  
  97. /******************************************************************************
  98.  **                                                                             **
  99.  **                            Neighborhood Functions                              **
  100.  **                                                                             **
  101.  *****************************************************************************/
  102.  
  103. EXPORT TQ3NeighborhoodObject Q3Neighborhood_New(
  104.     void);
  105.     
  106. EXPORT TQ3Status Q3Neighborhood_Dispose(
  107.     TQ3NeighborhoodObject    neigh);
  108.  
  109. EXPORT TQ3Status Q3Neighborhood_Initialize(
  110.     TQ3NeighborhoodObject    neigh);
  111.  
  112. EXPORT TQ3Status Q3Neighborhood_Validate(
  113.     TQ3NeighborhoodObject    neigh,
  114.     unsigned long            field);
  115.  
  116. EXPORT TQ3Status Q3Neighborhood_InValidate(
  117.     TQ3NeighborhoodObject    neigh,
  118.     unsigned long            field);
  119.  
  120. EXPORT TQ3Boolean Q3Neighborhood_IsValid(
  121.     TQ3NeighborhoodObject    neigh,
  122.     unsigned long            field);
  123.  
  124. EXPORT unsigned long Q3Neighborhood_GetValidFlag(
  125.     TQ3NeighborhoodObject    neigh);
  126.  
  127.  
  128. /******************************************************************************
  129.  **                                                                             **
  130.  **                                Set Methods                                  **
  131.  **                                                                             **
  132.  *****************************************************************************/
  133.  
  134. EXPORT TQ3Status Q3Neighborhood_SetImagePlane(
  135.     TQ3NeighborhoodObject    neigh,
  136.     const TQ3ImagePlane        *imagePlane);
  137.  
  138. EXPORT TQ3Status Q3Neighborhood_SetViewInfo(
  139.     TQ3NeighborhoodObject    neigh,
  140.     const TQ3ViewInfo        *viewInfo);
  141.  
  142. EXPORT TQ3Status Q3Neighborhood_SetLightGroup(
  143.     TQ3NeighborhoodObject    neigh,
  144.     TQ3GroupObject            lightGroup);
  145.  
  146. EXPORT TQ3Status Q3Neighborhood_SetRenderer(
  147.     TQ3NeighborhoodObject    neigh,
  148.     TQ3RendererObject        renderer);
  149.  
  150. EXPORT TQ3Status Q3Neighborhood_SetAmbientCoefficient(
  151.     TQ3NeighborhoodObject    neigh,
  152.     float                    ambientCoefficient);
  153.     
  154. EXPORT TQ3Status Q3Neighborhood_SetDiffuseColor(
  155.     TQ3NeighborhoodObject    neigh,
  156.     const TQ3ColorRGB        *diffuseColor);
  157.  
  158. EXPORT TQ3Status Q3Neighborhood_SetSpecularColor(
  159.     TQ3NeighborhoodObject    neigh,
  160.     const TQ3ColorRGB        *specularColor);
  161.  
  162. EXPORT TQ3Status Q3Neighborhood_SetSpecularControl(
  163.     TQ3NeighborhoodObject    neigh,
  164.     float                    specularControl);
  165.  
  166. EXPORT TQ3Status Q3Neighborhood_SetTransparencyColor(
  167.     TQ3NeighborhoodObject    neigh,
  168.     const TQ3ColorRGB         *transparencyColor);
  169.  
  170. EXPORT TQ3Status Q3Neighborhood_SetEmittedColor(
  171.     TQ3NeighborhoodObject    neigh,
  172.     const TQ3ColorRGB        *emittedColor);
  173.  
  174. EXPORT TQ3Status Q3Neighborhood_SetDepth(
  175.     TQ3NeighborhoodObject    neigh,
  176.     float                    depth);
  177.  
  178. EXPORT TQ3Status Q3Neighborhood_SetSurfaceUV(
  179.     TQ3NeighborhoodObject    neigh,
  180.     const TQ3Param2D        *surfaceUV);
  181.  
  182. EXPORT TQ3Status Q3Neighborhood_SetSurfaceLocation(
  183.     TQ3NeighborhoodObject    neigh,
  184.     const TQ3Point3D        *surfaceLocation);
  185.  
  186. EXPORT TQ3Status Q3Neighborhood_SetSurfaceNormal(
  187.     TQ3NeighborhoodObject    neigh,
  188.     const TQ3Vector3D         *surfaceNormal);
  189.  
  190. EXPORT TQ3Status Q3Neighborhood_SetSurfaceTangent(
  191.     TQ3NeighborhoodObject    neigh,
  192.     const TQ3Tangent2D        *surfaceTangent);
  193.  
  194. EXPORT TQ3Status Q3Neighborhood_SetSurfaceFilterSize(
  195.     TQ3NeighborhoodObject    neigh,
  196.     float                    surfaceFilterSize);
  197.  
  198. EXPORT TQ3Status Q3Neighborhood_SetSurfaceProjectedPixelX(
  199.     TQ3NeighborhoodObject    neigh,
  200.     const TQ3Vector2D        *surfaceProjectedPixelX);
  201.  
  202. EXPORT TQ3Status Q3Neighborhood_SetSurfaceProjectedPixelY(
  203.     TQ3NeighborhoodObject    neigh,
  204.     const TQ3Vector2D        *surfaceProjectedPixelY);
  205.  
  206. EXPORT TQ3Status Q3Neighborhood_SetSurfaceWorldFilterSize(
  207.     TQ3NeighborhoodObject    neigh,
  208.     float                    surfaceWorldFilterSize);
  209.  
  210. EXPORT TQ3Status Q3Neighborhood_SetSurfaceWorldProjectedPixelX(
  211.     TQ3NeighborhoodObject    neigh,
  212.     const TQ3Vector3D        *surfaceWorldProjectedPixelX);
  213.  
  214. EXPORT TQ3Status Q3Neighborhood_SetSurfaceWorldProjectedPixelY(
  215.     TQ3NeighborhoodObject    neigh,
  216.     const TQ3Vector3D        *surfaceWorldProjectedPixelY);
  217.  
  218. EXPORT TQ3Status Q3Neighborhood_SetShadingUV(
  219.     TQ3NeighborhoodObject    neigh,
  220.     const TQ3Param2D        *shadingUV);
  221.  
  222. EXPORT TQ3Status Q3Neighborhood_SetShadingNormal(
  223.     TQ3NeighborhoodObject    neigh,
  224.     const TQ3Vector3D        *shadingNormal);
  225.  
  226. EXPORT TQ3Status Q3Neighborhood_SetShadingColor(
  227.     TQ3NeighborhoodObject    neigh,
  228.     const TQ3ColorRGB        *shadingColor);
  229.  
  230. EXPORT TQ3Status Q3Neighborhood_SetShadingScalar(
  231.     TQ3NeighborhoodObject    neigh,
  232.     float                    shadingScalar);
  233.  
  234. EXPORT TQ3Status Q3Neighborhood_SetShadingOpacity(
  235.     TQ3NeighborhoodObject    neigh,
  236.     float                    shadingOpacity);
  237.  
  238. EXPORT TQ3Status Q3Neighborhood_SetShadingTrim(
  239.     TQ3NeighborhoodObject    neigh,
  240.     TQ3Boolean                shadingTrim);
  241.  
  242.  
  243. /******************************************************************************
  244.  **                                                                             **
  245.  **                                Get Methods                                  **
  246.  **                                                                             **
  247.  *****************************************************************************/
  248.  
  249. EXPORT TQ3ImagePlane *Q3Neighborhood_GetImagePlane(
  250.     TQ3NeighborhoodObject    neigh);
  251.  
  252. EXPORT TQ3ViewInfo *Q3Neighborhood_GetViewInfo(
  253.     TQ3NeighborhoodObject    neigh);
  254.  
  255. EXPORT TQ3GroupObject Q3Neighborhood_GetLightGroup(
  256.     TQ3NeighborhoodObject    neigh);
  257.  
  258. EXPORT TQ3RendererObject Q3Neighborhood_GetRenderer(
  259.     TQ3NeighborhoodObject    neigh);
  260.  
  261. EXPORT float Q3Neighborhood_GetAmbientCoefficient(
  262.     TQ3NeighborhoodObject    neigh);
  263.     
  264. EXPORT TQ3ColorRGB *Q3Neighborhood_GetDiffuseColor(
  265.     TQ3NeighborhoodObject    neigh);
  266.  
  267. EXPORT TQ3ColorRGB *Q3Neighborhood_GetSpecularColor(
  268.     TQ3NeighborhoodObject    neigh);
  269.  
  270. EXPORT float Q3Neighborhood_GetSpecularControl(
  271.     TQ3NeighborhoodObject    neigh);
  272.  
  273. EXPORT TQ3ColorRGB *Q3Neighborhood_GetTransparencyColor(
  274.     TQ3NeighborhoodObject    neigh);
  275.  
  276. EXPORT TQ3ColorRGB *Q3Neighborhood_GetEmittedColor(
  277.     TQ3NeighborhoodObject    neigh);
  278.  
  279. EXPORT float Q3Neighborhood_GetDepth(
  280.     TQ3NeighborhoodObject    neigh);
  281.  
  282. EXPORT TQ3Param2D *Q3Neighborhood_GetSurfaceUV(
  283.     TQ3NeighborhoodObject    neigh);
  284.  
  285. EXPORT TQ3Point3D *Q3Neighborhood_GetSurfaceLocation(
  286.     TQ3NeighborhoodObject    neigh);
  287.  
  288. EXPORT TQ3Vector3D *Q3Neighborhood_GetSurfaceNormal(
  289.     TQ3NeighborhoodObject    neigh);
  290.  
  291. EXPORT TQ3Tangent2D *Q3Neighborhood_GetSurfaceTangent(
  292.     TQ3NeighborhoodObject    neigh);
  293.  
  294. EXPORT float Q3Neighborhood_GetSurfaceFilterSize(
  295.     TQ3NeighborhoodObject    neigh);
  296.  
  297. EXPORT TQ3Vector2D *Q3Neighborhood_GetSurfaceProjectedPixelX(
  298.     TQ3NeighborhoodObject    neigh);
  299.  
  300. EXPORT TQ3Vector2D *Q3Neighborhood_GetSurfaceProjectedPixelY(
  301.     TQ3NeighborhoodObject    neigh);
  302.  
  303. EXPORT float Q3Neighborhood_GetSurfaceWorldFilterSize(
  304.     TQ3NeighborhoodObject    neigh);
  305.  
  306. EXPORT TQ3Vector3D *Q3Neighborhood_GetSurfaceWorldProjectedPixelX(
  307.     TQ3NeighborhoodObject    neigh);
  308.  
  309. EXPORT TQ3Vector3D *Q3Neighborhood_GetSurfaceWorldProjectedPixelY(
  310.     TQ3NeighborhoodObject    neigh);
  311.  
  312. EXPORT TQ3Param2D *Q3Neighborhood_GetShadingUV(
  313.     TQ3NeighborhoodObject    neigh);
  314.  
  315. EXPORT TQ3Vector3D *Q3Neighborhood_GetShadingNormal(
  316.     TQ3NeighborhoodObject    neigh);
  317.  
  318. EXPORT TQ3ColorRGB *Q3Neighborhood_GetShadingColor(
  319.     TQ3NeighborhoodObject    neigh);
  320.  
  321. EXPORT float Q3Neighborhood_GetShadingScalar(
  322.     TQ3NeighborhoodObject    neigh);
  323.  
  324. EXPORT float Q3Neighborhood_GetShadingOpacity(
  325.     TQ3NeighborhoodObject    neigh);
  326.  
  327. EXPORT TQ3Boolean Q3Neighborhood_GetShadingTrim(
  328.     TQ3NeighborhoodObject    neigh);
  329.     
  330. #endif  /*  ESCHER_VER_15  */
  331.  
  332.  
  333. /******************************************************************************
  334.  **                                                                             **
  335.  **                                    Boundary Type                              **
  336.  **                                                                             **
  337.  *****************************************************************************/
  338.  
  339. typedef enum TQ3ShaderUVBoundary {
  340.     kQ3ShaderUVBoundaryWrap,
  341.     kQ3ShaderUVBoundaryClamp
  342. } TQ3ShaderUVBoundary;
  343.  
  344.  
  345. /******************************************************************************
  346.  **                                                                             **
  347.  **                                    Shader methods                              **
  348.  **                                                                             **
  349.  *****************************************************************************/
  350.  
  351. EXPORT TQ3Status Q3Shader_Submit(
  352.     TQ3ShaderObject            shader, 
  353.     TQ3ViewObject            view);
  354.  
  355. EXPORT TQ3Status Q3Shader_SetUVTransform(
  356.     TQ3ShaderObject            shader,
  357.     const TQ3Matrix3x3        *uvTransform);
  358.  
  359. EXPORT TQ3Status Q3Shader_GetUVTransform(
  360.     TQ3ShaderObject            shader,
  361.     TQ3Matrix3x3            *uvTransform);
  362.  
  363. EXPORT TQ3Status Q3Shader_SetUBoundary(
  364.     TQ3ShaderObject            shader,
  365.     TQ3ShaderUVBoundary        uBoundary);
  366.  
  367. EXPORT TQ3Status Q3Shader_SetVBoundary(
  368.     TQ3ShaderObject            shader,
  369.     TQ3ShaderUVBoundary        vBoundary);
  370.  
  371. EXPORT TQ3Status Q3Shader_GetUBoundary(
  372.     TQ3ShaderObject            shader,
  373.     TQ3ShaderUVBoundary        *uBoundary);
  374.  
  375. EXPORT TQ3Status Q3Shader_GetVBoundary(
  376.     TQ3ShaderObject            shader,
  377.     TQ3ShaderUVBoundary        *vBoundary);
  378.  
  379. EXPORT TQ3ObjectType Q3Shader_GetType(
  380.     TQ3ShaderObject            shader);
  381.  
  382.  
  383. /******************************************************************************
  384.  **                                                                             **
  385.  **                        Illumination Shader    Class Methods                      **
  386.  **                                                                             **
  387.  *****************************************************************************/
  388.  
  389. EXPORT TQ3ObjectType Q3IlluminationShader_GetType(
  390.     TQ3ShaderObject                shader);
  391.  
  392. /******************************************************************************
  393.  **                                                                             **
  394.  **                        Phong Illumination Shader                              **
  395.  **                                                                             **
  396.  *****************************************************************************/
  397.  
  398. EXPORT TQ3ShaderObject Q3PhongIllumination_New(
  399.     void);
  400.  
  401.  
  402. /******************************************************************************
  403.  **                                                                             **
  404.  **                        Lambert Illumination Shader                              **
  405.  **                                                                             **
  406.  *****************************************************************************/
  407.  
  408. EXPORT TQ3ShaderObject Q3LambertIllumination_New(
  409.     void);
  410.  
  411.  
  412. /******************************************************************************
  413.  **                                                                             **
  414.  **                        Lambert Illumination Shader                              **
  415.  **                                                                             **
  416.  *****************************************************************************/
  417.  
  418. EXPORT TQ3ShaderObject Q3NULLIllumination_New(
  419.     void);
  420.  
  421.  
  422. /******************************************************************************
  423.  **                                                                             **
  424.  **                        Texture Shader                                         **
  425.  **                                                                             **
  426.  *****************************************************************************/
  427.  
  428. EXPORT TQ3ShaderObject Q3TextureShader_New(
  429.     TQ3TextureObject            texture);
  430.  
  431. EXPORT TQ3Status Q3TextureShader_GetTexture(
  432.     TQ3ShaderObject                shader,
  433.     TQ3TextureObject            *texture);
  434.  
  435. EXPORT TQ3Status Q3TextureShader_SetTexture(
  436.     TQ3ShaderObject                shader,
  437.     TQ3TextureObject        texture);
  438.  
  439.  
  440. #if defined(ESCHER_VER_15) && ESCHER_VER_15
  441.  
  442. /******************************************************************************
  443.  **                                                                             **
  444.  **                            Enum Definitions                                 **
  445.  **                                                                             **
  446.  *****************************************************************************/
  447.  
  448. typedef enum TQ3ShaderEffect {
  449.     kQ3ShaderEffectReplace,
  450.     kQ3ShaderEffectDarken,
  451.     kQ3ShaderEffectLighten,
  452.     kQ3ShaderEffectMultiply
  453. } TQ3ShaderEffect;
  454.  
  455. typedef enum TQ3ShaderIlluminationUsageMasks {
  456.     kQ3ShaderIlluminationMaskInherited    = 1 << 0,
  457.     kQ3ShaderIlluminationMaskAttached    = 1 << 1,
  458.     kQ3ShaderIlluminationMaskEnabled    = 1 << 2
  459. } TQ3ShaderIlluminationUsageMasks;
  460.  
  461. typedef unsigned long TQ3ShaderIlluminationUsage;
  462.  
  463.  
  464. /******************************************************************************
  465.  **                                                                             **
  466.  **                                    Shader methods                              **
  467.  **                                                                             **
  468.  *****************************************************************************/
  469.  
  470. EXPORT TQ3Status Q3Shader_Evaluate(
  471.     TQ3ShaderObject            shader, 
  472.     TQ3NeighborhoodObject    neigh);
  473.  
  474.  
  475. /******************************************************************************
  476.  **                                                                             **
  477.  **                                set methods                                         **
  478.  **                                                                             **
  479.  *****************************************************************************/
  480.  
  481. EXPORT TQ3Status Q3Shader_SetAlphaChannel( 
  482.     TQ3ShaderObject            shader,
  483.     TQ3ShaderObject            alphaChannel);
  484.  
  485. EXPORT TQ3Status Q3Shader_SetUnderColor( 
  486.     TQ3ShaderObject            shader,
  487.     TQ3ShaderObject            underColor);
  488.  
  489. EXPORT TQ3Status Q3Shader_SetShaderEffect( 
  490.     TQ3ShaderObject            shader,
  491.     const TQ3ShaderEffect    shaderEffect);
  492.  
  493. EXPORT TQ3Status Q3Shader_SetAttachment( 
  494.     TQ3ShaderObject            shader,
  495.     TQ3AttachmentObject        attachment);
  496.  
  497. EXPORT TQ3Status Q3Shader_SetShaderTransform(
  498.     TQ3ShaderObject            shader,
  499.     const TQ3Matrix4x4        *shaderTransform);
  500.  
  501.  
  502. /******************************************************************************
  503.  **                                                                             **
  504.  **                                get methods                                         **
  505.  **                                                                             **
  506.  *****************************************************************************/
  507.  
  508. EXPORT TQ3Status Q3Shader_GetAlphaChannel( 
  509.     TQ3ShaderObject            shader,
  510.     TQ3ShaderObject            *alphaChannel);
  511.  
  512. EXPORT TQ3Status Q3Shader_GetUnderColor( 
  513.     TQ3ShaderObject            shader,
  514.     TQ3ShaderObject            *underColor);
  515.  
  516. EXPORT TQ3Status Q3Shader_GetShaderEffect( 
  517.     TQ3ShaderObject            shader,
  518.     TQ3ShaderEffect            *shaderEffect);
  519.  
  520. EXPORT TQ3Status Q3Shader_GetAttachment( 
  521.     TQ3ShaderObject            shader,
  522.     TQ3AttachmentObject        *attachment);
  523.  
  524. EXPORT TQ3Status Q3Shader_GetShaderTransform(
  525.     TQ3ShaderObject            shader,
  526.     TQ3Matrix4x4            *shaderTransform);
  527.  
  528.  
  529. /******************************************************************************
  530.  **                                                                             **
  531.  **                            illuminator methods                                      **
  532.  **                                                                             **
  533.  *****************************************************************************/
  534.  
  535. EXPORT TQ3Status Q3Shader_AttachIlluminator(
  536.     TQ3ShaderObject                shader,
  537.     TQ3ShaderObject                illum);
  538.     
  539. EXPORT TQ3Status Q3Shader_InheritIlluminator(
  540.     TQ3ShaderObject                shader);
  541.  
  542. EXPORT TQ3Status Q3Shader_DisableIlluminator(
  543.     TQ3ShaderObject                shader);
  544.  
  545. EXPORT TQ3Status Q3Shader_EnableIlluminator(
  546.     TQ3ShaderObject                shader);
  547.  
  548. EXPORT TQ3Status Q3Shader_QueryIlluminationUsage(
  549.     TQ3ShaderObject                shader,
  550.     TQ3ShaderIlluminationUsage    *illuminationUsage);
  551.  
  552.  
  553. /******************************************************************************
  554.  **                                                                             **
  555.  **                            class managment methods                                **
  556.  **                                                                             **
  557.  *****************************************************************************/
  558.  
  559. EXPORT TQ3ObjectClass Q3ShaderClass_Register(
  560.     TQ3ObjectType        shaderType,
  561.     const char            *shaderName,
  562.     TQ3MetaHandler        metaHandler);
  563.  
  564. EXPORT void *Q3Shader_GetSubClassData(
  565.     TQ3ShaderObject        shader,
  566.     TQ3ObjectType        shaderType);
  567.     
  568.  
  569. /******************************************************************************
  570.  **                                                                             **
  571.  **                        Atmospheric Shader                                     **
  572.  **                                                                             **
  573.  *****************************************************************************/
  574.  
  575. EXPORT TQ3ShaderObject Q3AtmosphericShader_New(
  576.     void);
  577.     
  578. EXPORT TQ3Status Q3AtmosphericShader_GetExtinctionCoefficient(
  579.     TQ3ShaderObject            shader,
  580.     float                    *extinctionCoefficient);
  581.  
  582. EXPORT TQ3Status Q3AtmosphericShader_GetAtmosphereColor(
  583.     TQ3ShaderObject            shader,
  584.     TQ3ColorRGB                *atmosphereColor);
  585.  
  586. EXPORT TQ3Status Q3AtmosphericShader_SetExtinctionCoefficient(
  587.     TQ3ShaderObject            shader,
  588.     float                    extinctionCoefficient);
  589.  
  590. EXPORT TQ3Status Q3AtmosphericShader_SetAtmosphereColor(
  591.     TQ3ShaderObject            shader,
  592.     const TQ3ColorRGB        *atmosphereColor);
  593.  
  594.  
  595. /******************************************************************************
  596.  **                                                                             **
  597.  **                        Base Class Illumination Shader                         **
  598.  **                                                                             **
  599.  *****************************************************************************/
  600.  
  601. EXPORT TQ3ObjectClass Q3IlluminationShaderClass_Register(
  602.     TQ3ObjectType                illuminationShaderType,
  603.     const char                    *illuminationShaderName,
  604.     TQ3MetaHandler                metaHandler);
  605.  
  606. EXPORT void *Q3IlluminationShader_GetSubClassData(
  607.     TQ3IlluminationShaderObject    illuminationShader,
  608.     TQ3ObjectType                illuminationShaderType);
  609.  
  610. EXPORT TQ3ShaderObject Q3IlluminationShader_New(
  611.     TQ3ObjectClass                illuminationShaderClass,
  612.     unsigned long                dataSize);
  613.  
  614. EXPORT TQ3Status  Q3IlluminationShader_SetLightGroup(
  615.     TQ3ShaderObject                shader,
  616.     TQ3GroupObject                lightGroup);
  617.  
  618. EXPORT TQ3Status Q3IlluminationShader_GetLightGroup(
  619.     TQ3ShaderObject                shader,
  620.     TQ3GroupObject                *lightGroup);
  621.  
  622.  
  623. /******************************************************************************
  624.  **                                                                             **
  625.  **                        Base Class Surface Shader                              **
  626.  **                                                                             **
  627.  *****************************************************************************/
  628.  
  629. EXPORT TQ3ObjectClass Q3SurfaceShaderClass_Register(
  630.     TQ3ObjectType                surfaceShaderType,
  631.     const char                    *surfaceShaderName,
  632.     TQ3MetaHandler                metaHandler);
  633.  
  634. EXPORT void *Q3SurfaceShader_GetSubClassData(
  635.     TQ3SurfaceShaderObject        surfaceShader,
  636.     TQ3ObjectType                surfaceShaderType);
  637.  
  638. EXPORT TQ3ShaderObject Q3SurfaceShader_New(
  639.     TQ3ObjectClass                surfaceShaderClass,
  640.     unsigned long                dataSize);
  641.  
  642. EXPORT TQ3ObjectType Q3SurfaceShader_GetType(
  643.     TQ3SurfaceShaderObject        shader);
  644.  
  645. /******************************************************************************
  646.  **                                                                             **
  647.  **                        Image Shader                                          **
  648.  **                                                                             **
  649.  *****************************************************************************/
  650.  
  651. #define    kQ3ImageShaderForeground    ((unsigned long)1 << 1)
  652. #define    kQ3ImageShaderBackground    ((unsigned long)1 << 2)
  653.  
  654. EXPORT TQ3ShaderObject Q3ImageShader_New(
  655.     unsigned long kind);
  656.  
  657. EXPORT TQ3Status Q3ImageShader_GetView(
  658.     TQ3ShaderObject                shader,
  659.     TQ3ViewObject                *view);
  660.     
  661. EXPORT TQ3Status Q3ImageShader_GetSourceShader(
  662.     TQ3ShaderObject                shader,
  663.     TQ3ShaderObject                *sourceShader);
  664.  
  665. EXPORT TQ3Status Q3ImageShader_SetView(
  666.     TQ3ShaderObject                shader,
  667.     const TQ3ViewObject            view);
  668.  
  669. EXPORT TQ3Status Q3ImageShader_SetSourceShader(
  670.     TQ3ShaderObject                shader,
  671.     const TQ3ShaderObject        sourceShader);
  672.  
  673.  
  674. /******************************************************************************
  675.  **                                                                             **
  676.  **                        Trim Shader                                              **
  677.  **                                                                             **
  678.  *****************************************************************************/
  679.  
  680. EXPORT TQ3ShaderObject Q3TrimShader_New(
  681.     void);
  682.  
  683. EXPORT TQ3Status Q3TrimShader_GetThreshold(
  684.     TQ3ShaderObject            shader,
  685.     float                    *threshold);
  686.     
  687. EXPORT TQ3Status Q3TrimShader_GetTrimmer(
  688.     TQ3ShaderObject            shader,
  689.     TQ3ShaderObject            *trimmer);
  690.  
  691. EXPORT TQ3Status Q3TrimShader_SetThreshold(
  692.     TQ3ShaderObject            shader,
  693.     float                    threshold);
  694.  
  695. EXPORT TQ3Status Q3TrimShader_SetTrimmer(
  696.     TQ3ShaderObject            shader,
  697.     TQ3ShaderObject            trimmer);
  698.  
  699. #endif /* ESCHER_VER_15 */
  700.  
  701.  
  702. /******************************************************************************
  703.  **                                                                             **
  704.  **                                    Texture Methods                              **
  705.  **                                                                             **
  706.  *****************************************************************************/
  707.  
  708. EXPORT TQ3ObjectType Q3Texture_GetType(
  709.     TQ3TextureObject        texture);
  710.  
  711. EXPORT TQ3Status Q3Texture_GetWidth(
  712.     TQ3TextureObject        texture,
  713.     unsigned long            *width);
  714.  
  715. EXPORT TQ3Status Q3Texture_GetHeight(
  716.     TQ3TextureObject        texture,
  717.     unsigned long            *height);
  718.  
  719.  
  720. /******************************************************************************
  721.  **                                                                             **
  722.  **                            Pixmap Texture                                      **
  723.  **                                                                             **
  724.  *****************************************************************************/
  725.  
  726. EXPORT TQ3TextureObject Q3PixmapTexture_New(
  727.     const TQ3StoragePixmap    *pixmap);
  728.  
  729. EXPORT TQ3Status Q3PixmapTexture_GetPixmap(
  730.     TQ3TextureObject        texture,
  731.     TQ3StoragePixmap        *pixmap);
  732.  
  733. EXPORT TQ3Status Q3PixmapTexture_SetPixmap(
  734.     TQ3TextureObject        texture,
  735.     const TQ3StoragePixmap    *pixmap);
  736.  
  737. #if defined(ESCHER_VER_15) && ESCHER_VER_15
  738.  
  739. EXPORT TQ3Status Q3Texture_GetBitsPerChannel(
  740.     TQ3TextureObject        texture,
  741.     unsigned long            *bitsPerChannel);
  742.  
  743. EXPORT TQ3Status Q3Texture_GetNumberOfChannels(
  744.     TQ3TextureObject        texture,
  745.     unsigned long            *numberOfChannels);
  746.  
  747. EXPORT TQ3Status Q3Texture_GetAlphaChannel(
  748.     TQ3TextureObject        texture,
  749.     unsigned long            *alphaChannel);
  750.  
  751. EXPORT TQ3Status Q3Texture_GetRGBChannel(
  752.     TQ3TextureObject        texture,
  753.     unsigned long            *redChannel,
  754.     unsigned long            *greenChannel,
  755.     unsigned long            *blueChannel);
  756.  
  757.  
  758. /******************************************************************************
  759.  **                                                                             **
  760.  **                            Texture set methods                                      **
  761.  **                                                                             **
  762.  *****************************************************************************/
  763.  
  764. EXPORT TQ3Status Q3Texture_SetAlphaChannel(
  765.     TQ3TextureObject        texture,
  766.     unsigned long            alphaChannel);
  767.  
  768. EXPORT TQ3Status Q3Texture_SetRGBChannel(
  769.     TQ3TextureObject        texture,
  770.     unsigned long            redChannel,
  771.     unsigned long            greenChannel,
  772.     unsigned long            blueChannel);
  773.  
  774.  
  775. /******************************************************************************
  776.  **                                                                             **
  777.  **                            Class managment methods                                **
  778.  **                                                                             **
  779.  *****************************************************************************/
  780.  
  781. EXPORT TQ3ObjectClass Q3TextureClass_Register(
  782.     TQ3ObjectType        textureType,
  783.     const char            *textureName,
  784.     TQ3MetaHandler        metaHandler);
  785.  
  786. EXPORT void *Q3Texture_GetSubClassData(
  787.     TQ3TextureObject    texture,
  788.     TQ3ObjectType        textureType);
  789.  
  790.  
  791. /******************************************************************************
  792.  **                                                                             **
  793.  **                                Attachment methods                              **
  794.  **                                                                             **
  795.  *****************************************************************************/
  796.  
  797. TQ3Status Q3Attachment_Evaluate(
  798.     TQ3AttachmentObject            attachment, 
  799.     TQ3NeighborhoodObject        neigh);
  800.  
  801.  
  802. /******************************************************************************
  803.  **                                                                             **
  804.  **                                Set methods                                         **
  805.  **                                                                             **
  806.  *****************************************************************************/
  807.  
  808. TQ3Status Q3Attachment_SetBoundingSphere(
  809.     TQ3AttachmentObject            attachment,
  810.     const TQ3BoundingSphere        *boundingSphere);
  811.  
  812. TQ3Status Q3Attachment_SetAttachmentTransform(
  813.     TQ3AttachmentObject            attachment,
  814.     const TQ3Matrix4x4            *attachmentTransform);
  815.  
  816.  
  817. /******************************************************************************
  818.  **                                                                             **
  819.  **                                Get methods                                         **
  820.  **                                                                             **
  821.  *****************************************************************************/
  822.  
  823. TQ3Status Q3Attachment_GetBoundingSphere(
  824.     TQ3AttachmentObject            attachment,
  825.     TQ3BoundingSphere            *boundingSphere);
  826.  
  827. TQ3Status Q3Attachment_GetAttachmentTransform(
  828.     TQ3AttachmentObject            attachment,
  829.     TQ3Matrix4x4                *attachmentTransform);
  830.  
  831.  
  832. /******************************************************************************
  833.  **                                                                             **
  834.  **                            Class managment methods                                **
  835.  **                                                                             **
  836.  *****************************************************************************/
  837.  
  838. TQ3ObjectClass Q3AttachmentClass_Register(
  839.     TQ3ObjectType                shaderType,
  840.     const char                    *shaderName,
  841.     TQ3MetaHandler                metaHandler);
  842.  
  843. void *Q3Attachment_GetSubClassData(
  844.     TQ3AttachmentObject            shader,
  845.     TQ3ObjectType                shaderType);
  846.  
  847. #endif /* ESCHER_VER_15 */
  848.  
  849. /******************************************************************************
  850.  **                                                                             **
  851.  **                            RGB Color routines                                  **
  852.  **                                                                             **
  853.  *****************************************************************************/
  854.  
  855. EXPORT TQ3ColorRGB *Q3ColorRGB_Set(
  856.     TQ3ColorRGB            *color,
  857.     float                r,
  858.     float                g,
  859.     float                b);
  860.  
  861. EXPORT TQ3ColorRGB *Q3ColorRGB_Add(
  862.     const TQ3ColorRGB     *c1, 
  863.     const TQ3ColorRGB     *c2,
  864.     TQ3ColorRGB            *result);
  865.  
  866. EXPORT TQ3ColorRGB *Q3ColorRGB_Subtract(
  867.     const TQ3ColorRGB     *c1, 
  868.     const TQ3ColorRGB     *c2,
  869.     TQ3ColorRGB            *result);
  870.  
  871. EXPORT TQ3ColorRGB *Q3ColorRGB_Scale(
  872.     const TQ3ColorRGB     *color, 
  873.     float                scale,
  874.     TQ3ColorRGB            *result);
  875.  
  876. EXPORT TQ3ColorRGB *Q3ColorRGB_Clamp(
  877.     const TQ3ColorRGB     *color,
  878.     TQ3ColorRGB            *result);
  879.  
  880. EXPORT TQ3ColorRGB *Q3ColorRGB_Lerp(
  881.     const TQ3ColorRGB     *first, 
  882.     const TQ3ColorRGB     *last, 
  883.     float                 alpha,
  884.     TQ3ColorRGB         *result);
  885.  
  886. EXPORT TQ3ColorRGB *Q3ColorRGB_Accumulate(
  887.     const TQ3ColorRGB     *src, 
  888.     TQ3ColorRGB         *result);
  889.  
  890. EXPORT float *Q3ColorRGB_Luminance(
  891.     const TQ3ColorRGB    *color, 
  892.     float                 *luminance);
  893.  
  894.  
  895. #ifdef __cplusplus
  896. }
  897. #endif    /* __cplusplus */
  898.  
  899. #endif  /*  QD3DShader_h  */
  900.